#include "HttpRequest.h"
//GET / HTTP/1.1
//Host: 127.0.0.1:2354
//Connection: keep-alive
//User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1
//Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
//Accept-Encoding: gzip,deflate,sdch
//Accept-Language: es-ES,es;q=0.8
//Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

HttpRequest::HttpRequest(std::string entrada) {
	generarMapa(entrada);
}

HttpRequest::~HttpRequest() {
}

void HttpRequest::generarMapa(std::string mensaje) {
	unsigned int posicionInicial = 0;
	unsigned int posicionFinal = 0;
	std::string clave;
	std::string valor;
	std::pair<std::string, std::string> dato;
	std::map<std::string, std::string>::iterator it;
	std::string linea;

	posicionFinal = mensaje.find(CRLF);
	linea = mensaje.substr(posicionInicial, posicionFinal);
	mensaje.erase(posicionInicial, posicionFinal + 2);
	posicionFinal = linea.find(" ");
	clave = "Method";
	valor = linea.substr(0, posicionFinal);
	linea.erase(0, posicionFinal + 1);
	dato.first = clave;
	dato.second = valor;
	idMapas.insert(dato);

	posicionFinal = linea.find(" ");
	clave = "Uri";
	valor = linea.substr(0, posicionFinal);
	linea.erase(0, posicionFinal + 1);
	dato.first = clave;
	dato.second = valor;
	idMapas.insert(dato);

	posicionFinal = linea.find(" ");
	clave = "Protocol";
	valor = linea;
	dato.first = clave;
	dato.second = valor;
	idMapas.insert(dato);

	posicionFinal = mensaje.find(CRLF);
	while (posicionFinal != std::string::npos) {
		std::cout << "." << std::endl;
		posicionFinal = mensaje.find(CRLF);
		linea = mensaje.substr(posicionInicial, posicionFinal);
		mensaje.erase(posicionInicial, posicionFinal + 2);
		posicionFinal = linea.find(" ");
		clave = linea.substr(0, posicionFinal - 1);
		valor = linea.substr(posicionFinal + 1, linea.length());
		dato.first = clave;
		dato.second = valor;
		idMapas.insert(dato);
	}
}

std::string HttpRequest::getValor(const std::string& clave) {
	std::pair<std::string, std::string> dato;
	std::map<std::string, std::string>::iterator it;
	std::string resultado = "";
	it = idMapas.find(clave);

	if ((it != idMapas.end())) {
		resultado = it->second;
	}
	return resultado;
}

std::string HttpRequest::getMethod() {
	return getValor("Method");
}

std::string HttpRequest::getUri() {
	return getValor("Uri");
}

std::string HttpRequest::getHost() {
	return getValor("Host");
}

std::string HttpRequest::getConnection() {
	return getValor("Connection");
}

std::string HttpRequest::getUserAgent() {
	return getValor("User-Agent");
}

std::string HttpRequest::getTypeText() {
	return getValor("Accept");
}
